/*
 * @Date: 2024-01-30 10:09:18
 * @LastEditors: lyx
 * @LastEditTime: 2024-01-30 14:04:03
 * @FilePath: \taro-template3\src\store\app.tsx
 * @Description:
 */
import Taro, { useLaunch } from "@tarojs/taro";
import React, { createContext, useContext, useEffect, useState } from "react";
import { setLocale } from "@/i18next/method";
import { getMenuButtonBoundingClientRectCompat } from "@/utils/common";

const GlobalDataContext = createContext<any>(null);

export function useGlobalData() {
  return useContext(GlobalDataContext);
}

export function GlobalDataProvider({ children }) {
  const [globalData, setGlobalData] = useState({});
  const [useInfo, setUseInfo] = useState({});

  useLaunch(() => {
    // 获取系统信息
    const systemInfo = Taro.getSystemInfoSync();
    // 获取状态栏高度
    const statusBarHeight = systemInfo.statusBarHeight || 0;
    // 获取胶囊按钮位置信息
    const menuButtonInfo = getMenuButtonBoundingClientRectCompat();
    const menuButtonHeight = menuButtonInfo.height;
    const menuButtonTop = menuButtonInfo.top;
    const navbarHeight =
      (menuButtonTop - statusBarHeight) * 2 + menuButtonHeight;
    // 获取当前环境
    const env = Taro.getEnv();
    // 获取用户信息
    // Taro.getUserProfile({
    //   desc: "用于完善会员资料", // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
    //   success: (res) => {
    //     console.log(res);
    //   },
    // });

    // 语言格式统一处理
    let language = systemInfo.language;
    if (!language) {
      // 提供一个默认值，例如英语
      language = "en";
    } else {
      // 标准化语言代码
      // 一般来说，小程序平台返回的是zh_CN这种格式，而浏览器往往返回的是zh-CN这种格式
      // 这里可以根据需要将其转化为统一格式
      language = language.replace(/_/g, "-").toLowerCase();
    }
    // 设置当前语言
    setLocale(language);
    setGlobalData({
      systemInfo: { ...systemInfo, navbarHeight, env },
    });
  });

  // 提供全局数据的 setter 函数
  const setGlobal = (data) => {
    setGlobalData((prevGlobalData) => ({
      ...prevGlobalData,
      ...data,
    }));
  };

  return (
    <GlobalDataContext.Provider
      value={{ ...globalData, setGlobal, useInfo, setUseInfo }}
    >
      {children}
    </GlobalDataContext.Provider>
  );
}
